//35.之前的写在store.js中。
//35.第三步：在store中新建文件夹slice，在slice文件夹的countslice文件里，从@reduxjs/toolkit引入createSlice，用来传入配置，自动生成action和reducer
//35.第四步：引入之后，直接调用createSlice，在里面传入配置。
// 第一个配置name：值为action中type值的前缀，这样防止重名
// 第二个配置initialState：是一个对象，对象中的属性是reducer提供的初始值
// 第三个配置reducers:就是定义reducer更新状态函数（如果是increment就加一）；reducers也是一个对象，对象里是更新状态函数，函数的名字就是action中type前缀后的值，比如counter-increment，更新状态函数中接受两个参数，和之前写的reducer函数一样，第一个参数是上一次的值prevstate，第二个参数是本次接收的action对象，第二个参数action对象中的payload就是用户调用action函数时传递的data，action对象上的type就是前缀加函数名‘counter-increment’，不需要像之前那样得到新值再修改，可以直接修改(原理是redux-toolkit中合成有一个immit的包帮我们处理了)，prevstate.count += action.payload
//35.第五步：暴露；
//reducer的暴露，在这个配置对象上有一个reducer属性，这个属性的值就是帮我们生成的reducer函数，暴露出去给store使用。
//action函数的暴露，在这个配置对象的actions属性上，用reducers配置中的更新状态的函数名字进行统一暴露
//35.第六步，创建store,写在store.js中
import {
  createSlice
} from "@reduxjs/toolkit";


const countSlice = createSlice({
  //action中type的命名空间
  name: "counter",
  //reducer提供的初始值
  initialState: {
    count: 0
  },
  reducers: {
    increment(prev, action) {
      //reduce中处理函数接收两个参数 分别是当前reducer中上一次的值\本次dispacth的action对象
      //action对象中有一个payload就是用户调用action函数时传递的参数

      //不需要像之前那样得到新值再覆盖,可以直接修改reducer中的值,redux-toolkit中合成有一个immit的包帮我们处理了
      prev.count += action.payload
    },
    decrement(prev, action) {
      prev.count -= action.payload
    }
  }
})


//通过createSilce创建的对象上有一个reducer属性，直接得到就是当前的reducer函数，可以暴露出去给store使用
export default countSlice.reducer

export const {
  increment,
  decrement
} = countSlice.actions;
console.log(increment, "123");